Micron Document
| SparkN0de-git | SparkN0de |


Displaying Raw • View renderedDownload


lang/README.ru.md 719e1634aafa9bcbeab236bcba0b25d6ef5bb7b6 (719e1634) Text, 20.29 KB

Tc9d1d9# Reticulum MeshChatX

[Tff7b72English](Te6edf3../README.md) | [Tff7b72Deutsch](Te6edf3README.de.md) | [Tff7b72Italiano](Te6edf3README.it.md) | [Tff7b72中文](Te6edf3README.zh.md) | [Tff7b72日本語](Te6edf3README.ja.md)

Существенно доработанный и функционально расширенный форк Reticulum MeshChat от Liam Cottle.

Этот проект независим от оригинального Reticulum MeshChat и не связан с ним.

Tff7b72- Сайт: [Tff7b72meshchatx.com](Te6edf3https://meshchatx.com)
Tff7b72- Исходный код: [Tff7b72git.quad4.io/RNS-Things/MeshChatX](Te6edf3https://git.quad4.io/RNS-Things/MeshChatX)
Tff7b72- Официальное зеркало: [Tff7b72github.com/Quad4/MeshChatX](Te6edf3https://github.com/Quad4/MeshChatX) — пока также используется для сборок Windows и macOS.
Tff7b72- Релизы: [Tff7b72git.quad4.io/RNS-Things/MeshChatX/releases](Te6edf3https://git.quad4.io/RNS-Things/MeshChatX/releases)
Tff7b72- Журнал изменений: [Ta5d6ff`CHANGELOG.md`](../CHANGELOG.md)
Tff7b72- TODO: [Tff7b72Boards](Te6edf3https://git.quad4.io/RNS-Things/MeshChatX/projects)

Tc9d1d9## Важные отличия от Reticulum MeshChat

Tff7b72- Используется LXST
Tff7b72- Peewee ORM заменён на прямой SQL
Tff7b72- Axios заменён на нативный Ta5d6ff`fetch`
Tff7b72- Electron 41.x (встроенная среда Node 24)
Tff7b72- Колёса Ta5d6ff`.whl` с веб-сервером и встроенным фронтендом для разных сценариев развёртывания
Tff7b72- i18n
Tff7b72- PNPM и Poetry для зависимостей

Tff7b72> [!WARNING]
Tff7b72> MeshChatX не гарантирует совместимость данных со старыми версиями Reticulum MeshChat. Сделайте резервную копию перед миграцией или тестированием.

Tff7b72> [!WARNING]
Tff7b72> Устаревшие системы пока не полностью поддерживаются. Текущие требования: Python `>=3.11` и Node `>=24` (Electron 41 соответствует Node 24; поле `engines` в `package.json` и CI на той же линии).

Tc9d1d9## Требования

Tff7b72- Python Ta5d6ff`>=3.11` (из Ta5d6ff`pyproject.toml`)
Tff7b72- Node.js Ta5d6ff`>=24` (из Ta5d6ff`package.json`, поле Ta5d6ff`engines`)
Tff7b72- pnpm Ta5d6ff`10.33.0` (из Ta5d6ff`package.json`, поле Ta5d6ff`packageManager`)
Tff7b72- Poetry (используется в Ta5d6ff`Taskfile.yml` и CI)

Ta5d6ff```Ta5d6ffbash
task install
task lint:all
task test:all
task build:all
Ta5d6ff```

Tc9d1d9## Способы установки

Выберите способ в соответствии со средой и форматом пакета.

| Метод | Включает фронтенд | Архитектуры | Лучше всего для |
| --------------------- | ------------------- | ---------------------------------------- | ------------------------------------- |
| Docker-образ | Да | Ta5d6ff`linux/amd64`, Ta5d6ff`linux/arm64` | Быстрый запуск на серверах Linux |
| Python wheel (Ta5d6ff`.whl`) | Да | Любая архитектура, поддерживаемая Python | Безголовый/веб-сервер без сборки Node |
| Linux AppImage | Да | Ta5d6ff`x64`, Ta5d6ff`arm64` | Портативное использование на ПК |
| Debian-пакет (Ta5d6ff`.deb`) | Да | Ta5d6ff`x64`, Ta5d6ff`arm64` | Установка на Debian/Ubuntu |
| RPM-пакет (Ta5d6ff`.rpm`) | Да | Зависит от CI | Fedora/RHEL/openSUSE |
| Из исходников | Собирается локально | Архитектура хоста | Разработка и кастомные сборки |

Примечания:

Tff7b72- Релизный workflow явно собирает Linux Ta5d6ff`x64` и Ta5d6ff`arm64` AppImage + DEB.
Tff7b72- RPM также собирается при попытке и загружается при успехе.

Tc9d1d9## Быстрый старт: Docker

Ta5d6ff```Ta5d6ffbash
docker compose up -d
Ta5d6ff```

Compose-файл по умолчанию:

Tff7b72- Ta5d6ff`127.0.0.1:8000` на хосте -> порт Ta5d6ff`8000` контейнера
Tff7b72- Ta5d6ff`./meshchat-config` -> Ta5d6ff`/config` для данных

Если возникают ошибки прав доступа:

Ta5d6ff```Ta5d6ffbash
sudo chown -R T79c0ff1000:1000 ./meshchat-config
Ta5d6ff```

Tc9d1d9## Установка из релизных артефактов

Tc9d1d9### 1) Linux AppImage (x64/arm64)

Tff7b721. Скачайте Ta5d6ff`ReticulumMeshChatX-v<версия>-linux-<арх>.AppImage` из релизов.
Tff7b722. Сделайте исполняемым и запустите:

Ta5d6ff```Ta5d6ffbash
chmod +x ./ReticulumMeshChatX-v*-linux-*.AppImage
./ReticulumMeshChatX-v*-linux-*.AppImage
Ta5d6ff```

Tc9d1d9### 2) Debian/Ubuntu `.deb` (x64/arm64)

Tff7b721. Скачайте Ta5d6ff`ReticulumMeshChatX-v<версия>-linux-<арх>.deb`.
Tff7b722. Установите:

Ta5d6ff```Ta5d6ffbash
sudo apt install ./ReticulumMeshChatX-v*-linux-*.deb
Ta5d6ff```

Tc9d1d9### 3) RPM-системы

Tff7b721. Скачайте Ta5d6ff`ReticulumMeshChatX-v<версия>-linux-<арх>.rpm`, если есть в релизе.
Tff7b722. Установите:

Ta5d6ff```Ta5d6ffbash
sudo rpm -Uvh ./ReticulumMeshChatX-v*-linux-*.rpm
Ta5d6ff```

Tc9d1d9### 4) Python wheel (`.whl`)

В релизных wheel включены собранные веб-ресурсы.

Ta5d6ff```Ta5d6ffbash
pip install ./reticulum_meshchatx-*-py3-none-any.whl
meshchatx --headless
Ta5d6ff```

Ta5d6ff`pipx` также поддерживается:

Ta5d6ff```Ta5d6ffbash
pipx install ./reticulum_meshchatx-*-py3-none-any.whl
Ta5d6ff```

Tc9d1d9## Запуск из исходников (режим веб-сервера)

Для разработки или локальной сборки.

Ta5d6ff```Ta5d6ffbash
git clone https://git.quad4.io/RNS-Things/MeshChatX.git
Tffa657cd MeshChatX
corepack Tffa657enable
pnpm config Tffa657set verify-store-integrity Tffa657true
pnpm install --frozen-lockfile
pip install Ta5d6ff"poetry==2.3.4"
poetry check --lock
poetry install
pnpm run build-frontend
poetry run python -m meshchatx.meshchat --headless --host T79c0ff127.0.0.1
Ta5d6ff```

Пояснения к командам установки:

Tff7b72- Ta5d6ff`pnpm install --frozen-lockfile` запрещает обновление Ta5d6ff`pnpm-lock.yaml` и завершится с ошибкой, если lock-файл не соответствует Ta5d6ff`package.json`. Это исключает скрытую установку неожиданной upstream-версии.
Tff7b72- Ta5d6ff`verify-store-integrity=true` уже задан в Ta5d6ff`.npmrc` проекта; явный Ta5d6ff`pnpm config set` дополнительно ужесточает пользовательскую конфигурацию.
Tff7b72- Lifecycle-скрипты (Ta5d6ff`preinstall`/Ta5d6ff`postinstall`) по умолчанию заблокированы в pnpm v10+. Скрипты установки могут запускать только пакеты из Ta5d6ff`pnpm.onlyBuiltDependencies` в Ta5d6ff`package.json` (сейчас это Ta5d6ff`electron`, Ta5d6ff`electron-winstaller`, Ta5d6ff`esbuild`, Ta5d6ff`protobufjs`).
Tff7b72- Ta5d6ff`poetry check --lock` сразу падает, если Ta5d6ff`poetry.lock` не синхронизирован с Ta5d6ff`pyproject.toml`; затем Ta5d6ff`poetry install` ставит зависимости только из lock-файла.
Tff7b72- Для строгой установки Poetry только из lock-файла зафиксируйте версию Poetry через Ta5d6ff`pip install "poetry==2.3.4"`, как это делает CI.

Если вы намеренно хотите обновить зависимости, выполните Ta5d6ff`pnpm update` / Ta5d6ff`poetry update` отдельным коммитом и проверьте diff lock-файлов до пуша.

Tc9d1d9## Запуск в песочнице (Linux)

Чтобы запускать нативный Ta5d6ff`meshchatx` (псевдоним: Ta5d6ff`meshchat`) с дополнительной изоляцией файловой системы, можно использовать **Firejail** или **Bubblewrap** (Ta5d6ff`bwrap`), сохраняя обычный сетевой доступ для Reticulum и веб-интерфейса. Полные примеры (pip/pipx, Poetry, USB-serial) в:

Tff7b72- [Ta5d6ff`docs/meshchatx_linux_sandbox.md`](../docs/meshchatx_linux_sandbox.md)

Та же страница отображается во встроенной **Документации** (документация MeshChatX), когда она отдаётся из Ta5d6ff`meshchatx-docs`.

Tc9d1d9## Linux на ПК: шрифты эмодзи

Выбор эмодзи отображает стандартные Unicode-эмодзи системными шрифтами (Electron/Chromium). Если вместо них пустые квадраты («тофу»), установите пакет цветных эмодзи и перезапустите приложение.

| Семейство (примеры) | Пакет |
| -------------------------- | -------------------------------------------------------------------- |
| Arch Linux, Artix, Manjaro | Ta5d6ff`noto-fonts-emoji` (Ta5d6ff`sudo pacman -S noto-fonts-emoji`) |
| Debian, Ubuntu | Ta5d6ff`fonts-noto-color-emoji` (Ta5d6ff`sudo apt install fonts-noto-color-emoji`) |
| Fedora | Ta5d6ff`google-noto-emoji-color-fonts` |

После установки при необходимости выполните Ta5d6ff`fc-cache -fv`. Опционально: Ta5d6ff`noto-fonts` для лучшего покрытия символов на минимальных установках.

Tc9d1d9## Сборка настольных пакетов из исходников

Скрипты заданы в Ta5d6ff`package.json` и Ta5d6ff`Taskfile.yml`.

Tc9d1d9### Linux x64 AppImage + DEB

Ta5d6ff```Ta5d6ffbash
pnpm run dist:linux-x64
Ta5d6ff```

Tc9d1d9### Linux arm64 AppImage + DEB

Ta5d6ff```Ta5d6ffbash
pnpm run dist:linux-arm64
Ta5d6ff```

Tc9d1d9### RPM

Ta5d6ff```Ta5d6ffbash
pnpm run dist:rpm
Ta5d6ff```

Через Task:

Ta5d6ff```Ta5d6ffbash
task dist:fe:rpm
Ta5d6ff```

Tc9d1d9## Поддержка архитектур

Tff7b72- Образ Docker: Ta5d6ff`amd64`, Ta5d6ff`arm64`
Tff7b72- Linux AppImage: Ta5d6ff`x64`, Ta5d6ff`arm64`
Tff7b72- Linux DEB: Ta5d6ff`x64`, Ta5d6ff`arm64`
Tff7b72- Windows: Ta5d6ff`x64`, Ta5d6ff`arm64` (скрипты сборки есть)
Tff7b72- macOS: скрипты сборки (Ta5d6ff`arm64`, Ta5d6ff`universal`) для локальных сред
Tff7b72- Android: нативные APK — ABI Ta5d6ff`arm64-v8a`, Ta5d6ff`x86_64`, плюс universal

Tc9d1d9## Android

MeshChatX поддерживает нативные Android APK (не только Termux).

Tc9d1d9### Сборка APK из исходников

Из корня репозитория:

Ta5d6ff```Ta5d6ffbash
T8b949e# 1) Собрать колёса Chaquopy для android/app/build.gradle
bash scripts/build-android-wheels-local.sh

T8b949e# 2) Собрать обе вариации APK
Tffa657cd android
./gradlew --no-daemon :app:assembleDebug :app:assembleRelease
Ta5d6ff```

Выходные APK (разбиение по ABI и универсальный APK; см. Ta5d6ff`splits { abi { ... } }` в Ta5d6ff`android/app/build.gradle`):

Отладка (Ta5d6ff`android/app/build/outputs/apk/debug/`):

Tff7b72- Ta5d6ff`app-arm64-v8a-debug.apk` (устройства ARM64)
Tff7b72- Ta5d6ff`app-x86_64-debug.apk` (эмуляторы x86_64)
Tff7b72- Ta5d6ff`app-universal-debug.apk` (все включённые ABI в одном пакете)

Релиз (Ta5d6ff`android/app/build/outputs/apk/release/`):

Tff7b72- Ta5d6ff`app-arm64-v8a-release-unsigned.apk`
Tff7b72- Ta5d6ff`app-x86_64-release-unsigned.apk`
Tff7b72- Ta5d6ff`app-universal-release-unsigned.apk`

Примечания:

Tff7b72- Релизные артефакты по умолчанию не подписаны, если не настроена подпись.
Tff7b72- Если нужна одна вариация: Ta5d6ff`:app:assembleDebug` или Ta5d6ff`:app:assembleRelease`.
Tff7b72- Целевые ABI — Ta5d6ff`arm64-v8a` и Ta5d6ff`x86_64` согласно Ta5d6ff`android/app/build.gradle`.

Дополнительная документация:

Tff7b72- [Ta5d6ff`docs/meshchatx_on_android_with_termux.md`](../docs/meshchatx_on_android_with_termux.md)
Tff7b72- [Ta5d6ff`android/README.md`](../android/README.md)

Tc9d1d9## Конфигурация

| Аргумент | Переменная окружения | По умолчанию | Описание |
| -------------------------- | ---------------------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Ta5d6ff`--host` | Ta5d6ff`MESHCHAT_HOST` | Ta5d6ff`127.0.0.1` | Адрес привязки веб-сервера |
| Ta5d6ff`--port` | Ta5d6ff`MESHCHAT_PORT` | Ta5d6ff`8000` | Порт веб-сервера |
| Ta5d6ff`--no-https` | Ta5d6ff`MESHCHAT_NO_HTTPS` | Ta5d6ff`false` | Отключить HTTPS |
| Ta5d6ff`--ssl-cert` / Ta5d6ff`--ssl-key` | Ta5d6ff`MESHCHAT_SSL_CERT` / Ta5d6ff`MESHCHAT_SSL_KEY` | (нет) | Пути к PEM-сертификату и ключу; задаются вместе. Переопределяют автосгенерированные сертификаты в каталоге Ta5d6ff`ssl/` у идентичности. |
| Ta5d6ff`--rns-log-level` | Ta5d6ff`MESHCHAT_RNS_LOG_LEVEL` | (нет) | Уровень лога стека Reticulum (RNS): Ta5d6ff`none`, Ta5d6ff`critical`, Ta5d6ff`error`, Ta5d6ff`warning`, Ta5d6ff`notice`, Ta5d6ff`verbose`, Ta5d6ff`debug`, Ta5d6ff`extreme` или число. CLI перекрывает переменную окружения, если заданы оба. |
| Ta5d6ff`--headless` | Ta5d6ff`MESHCHAT_HEADLESS` | Ta5d6ff`false` | Не открывать браузер автоматически |
| Ta5d6ff`--auth` | Ta5d6ff`MESHCHAT_AUTH` | Ta5d6ff`false` | Базовая аутентификация |
| Ta5d6ff`--storage-dir` | Ta5d6ff`MESHCHAT_STORAGE_DIR` | Ta5d6ff`./storage` | Каталог данных |
| Ta5d6ff`--public-dir` | Ta5d6ff`MESHCHAT_PUBLIC_DIR` | авто/bundled | Каталог фронтенда (для установок без встроенных ресурсов) |

Tc9d1d9## Ветки

| Ветка | Назначение |
| -------- | ------------------------------------------------------------------ |
| Ta5d6ff`master` | Стабильные релизы. Только код для продакшена. |
| Ta5d6ff`dev` | Активная разработка. Возможны нестабильные или неполные изменения. |

Tc9d1d9## Разработка

Типичные задачи из Ta5d6ff`Taskfile.yml`:

Ta5d6ff```Ta5d6ffbash
task install
task lint:all
task test:all
task build:all
Ta5d6ff```

Сокращения Ta5d6ff`Makefile`:

| Команда | Описание |
| -------------- | --------------------------------------- |
| Ta5d6ff`make install` | Установить зависимости pnpm и poetry |
| Ta5d6ff`make run` | Запуск MeshChatX через poetry |
| Ta5d6ff`make build` | Сборка фронтенда |
| Ta5d6ff`make lint` | eslint и ruff |
| Ta5d6ff`make test` | Тесты фронтенда и бэкенда |
| Ta5d6ff`make clean` | Удалить артефакты сборки и node_modules |

Tc9d1d9## Версионирование

Текущая версия в репозитории: Ta5d6ff`4.5.0`.

Tff7b72- Источник версии JS/Electron — Ta5d6ff`package.json`.
Tff7b72- Ta5d6ff`meshchatx/src/version.py` синхронизируется из Ta5d6ff`package.json`:

Ta5d6ff```Ta5d6ffbash
pnpm run version:sync
Ta5d6ff```

Для согласованных релизов выравнивайте поля версий где нужно (Ta5d6ff`package.json`, Ta5d6ff`pyproject.toml`, Ta5d6ff`meshchatx/__init__.py`).

Tc9d1d9## Безопасность

Tff7b72- [Ta5d6ff`SECURITY.md`](../SECURITY.md)
Tff7b72- Встроенные проверки целостности и HTTPS/WSS по умолчанию в приложении
Tff7b72- CI-сканирование в Ta5d6ff`.gitea/workflows/`

Tc9d1d9## Добавление языка

Обнаружение локали происходит автоматически. Добавьте новый файл в Ta5d6ff`meshchatx/src/frontend/locales/` (например Ta5d6ff`xx.json`) с теми же ключами, что и в Ta5d6ff`en.json`, и полем Ta5d6ff`_languageName` в начале для подписи в селекторе языка. Можно скопировать Ta5d6ff`en.json` и перевести всё вручную; **автоматическая генерация (Argos и т. п.) необязательна** и не требуется.

**Исправления и переводы от людей приветствуются.** Улучшения существующих файлов локали или полностью ручной перевод можно прислать через pull request или issue в [Tff7b72исходном репозитории](Te6edf3https://git.quad4.io/RNS-Things/MeshChatX) или на [Tff7b72зеркале GitHub](Te6edf3https://github.com/Sudo-Ivan/MeshChatX).

**По желанию: черновик через Argos Translate** -- если нужен машинный первый проход из Ta5d6ff`en.json`, можно использовать Ta5d6ff`scripts/argos_translate.py`. Он обрабатывает форматирование и помогает защитить переменные интерполяции (например Ta5d6ff`{count}`).

Ta5d6ff```Ta5d6ffbash
T8b949e# Установите argostranslate, если вы еще этого не сделали
pip install argostranslate

T8b949e# Запустите скрипт перевода
python scripts/argos_translate.py --from en --to xx --input meshchatx/src/frontend/locales/en.json --output meshchatx/src/frontend/locales/xx.json --name Ta5d6ff"Название вашего языка"
Ta5d6ff```

После машинного черновика имеет смысл проверить грамматику, контекст и тон с помощью LLM или человека (формальный или неформальный стиль).

Проверьте совпадение ключей с помощью: Ta5d6ff`pnpm test -- tests/frontend/i18n.test.js --run`

Никаких других изменений в коде не требуется. Приложение, селектор языка и тесты обнаруживают локали из каталога Ta5d6ff`meshchatx/src/frontend/locales/` во время сборки.

Tc9d1d9## Авторы

Tff7b72- [Tff7b72Liam Cottle](Te6edf3https://github.com/liamcottle) — оригинальный Reticulum MeshChat
Tff7b72- [Tff7b72RFnexus](Te6edf3https://github.com/RFnexus) — парсер Micron (JavaScript)
Tff7b72- [Tff7b72markqvist](Te6edf3https://github.com/markqvist) — Reticulum, LXMF, LXST

Tc9d1d9## Лицензия

Собственные части проекта лицензированы по 0BSD.
Оригинальные upstream-части, унаследованные от MeshChat, остаются под MIT.
Полный текст и уведомления см. в [Ta5d6ff`../LICENSE`](../LICENSE).


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────